package com.lekang.system.service;

import java.util.List;
import java.util.Map;
import com.lekang.system.domain.CheckOutManagement;

/**
 * 退住办理Service接口
 * 
 * @author ruoyi
 * @date 2025-10-13
 */
public interface ICheckOutManagementService 
{
    /**
     * 查询退住办理
     * 
     * @param id 退住办理主键
     * @return 退住办理
     */
    public CheckOutManagement selectCheckOutManagementById(Long id);
    
    /**
     * 根据业务ID查询退住办理
     * 
     * @param businessId 业务ID
     * @return 退住办理
     */
    public CheckOutManagement selectCheckOutManagementByBusinessId(String businessId);

    /**
     * 查询退住办理列表
     * 
     * @param checkOutManagement 退住办理
     * @return 退住办理集合
     */
    public List<CheckOutManagement> selectCheckOutManagementList(CheckOutManagement checkOutManagement);

    /**
     * 新增退住办理
     * 
     * @param checkOutManagement 退住办理
     * @return 结果
     */
    public int insertCheckOutManagement(CheckOutManagement checkOutManagement);

    /**
     * 修改退住办理
     * 
     * @param checkOutManagement 退住办理
     * @return 结果
     */
    public int updateCheckOutManagement(CheckOutManagement checkOutManagement);
    
    /**
     * 提交解除合同（步骤3）
     * 
     * @param businessId 业务ID
     * @param contractNo 合同编号
     * @param fileName 解除协议文件名
     * @param taskId 工作流任务ID
     * @param ptId 待办任务ID
     * @return 结果
     */
    public int submitTermination(Long businessId, String contractNo, String fileName, String taskId, Long ptId);
    
    /**
     * 提交账单调整（步骤4）
     * 
     * @param businessId 业务ID
     * @param taskId 工作流任务ID
     * @param ptId 待办任务ID
     * @return 结果
     */
    public int submitBillAdjustment(Long businessId, String taskId, Long ptId, String opinion, Integer auditStatus);
    
    /**
     * 提交账单审批（步骤5）
     * 
     * @param businessId 业务ID
     * @param taskId 工作流任务ID
     * @param ptId 待办任务ID
     * @param opinion 审批意见
     * @param auditStatus 审核状态（1=通过，2=拒绝）
     * @return 结果（包含第六步参数）
     */
    public Map<String, Object> submitBillApproval(Long businessId, String taskId, Long ptId, String opinion, Integer auditStatus);
    
    /**
     * 提交副院长审批（步骤6）
     * 
     * @param businessId 业务ID
     * @param taskId 工作流任务ID
     * @param ptId 待办任务ID
     * @param opinion 审批意见
     * @param auditStatus 审核状态（1=通过，2=拒绝）
     * @param miscFees 杂费金额
     * @return 结果
     */
    public int submitVicePresidentApproval(Long businessId, String taskId, Long ptId, String opinion, Integer auditStatus, Double miscFees);
    
    /**
     * 提交费用清算（步骤7）- 最后一步
     * 
     * @param businessId 业务ID
     * @param taskId 工作流任务ID
     * @param ptId 待办任务ID
     * @param opinion 审批意见
     * @param auditStatus 审核状态（1=通过，2=拒绝）
     * @return 结果
     */
    public int submitBillSettlement(Long businessId, String taskId, Long ptId, String opinion, Integer auditStatus, Long elderlyId, Double refundAmount);

    /**
     * 批量删除退住办理
     * 
     * @param ids 需要删除的退住办理主键集合
     * @return 结果
     */
    public int deleteCheckOutManagementByIds(Long[] ids);

    /**
     * 删除退住办理信息
     * 
     * @param id 退住办理主键
     * @return 结果
     */
    public int deleteCheckOutManagementById(Long id);

    /**
     * 获取审批通过页面的完整数据
     * 
     * @param businessId 业务ID
     * @return 退住办理完整数据
     */
    public CheckOutManagement getApprovalPassedData(Long businessId);
    
    /**
     * 获取下一步工作流任务ID
     * 
     * @return 下一步工作流任务ID
     */
    public String getNextStepTaskId();
    
    /**
     * 获取下一步待办任务ID
     * 
     * @return 下一步待办任务ID
     */
    public Long getNextStepPtId();
}
